﻿#ifndef PILERationnelS_H
#define PILERationnelS_H
/**
 \file pilerationnels.h
 \brief Pile des rationnels
 \author Baptiste Pirault et  Hugo Dubois
 \date 01/06/2012
 \version 1
 **/
 
#include <QString>
#include <iostream>
#include <QSettings>

#include "rationnel.h"
#include "exception.h"
#include "pileaffichage.h"
#include "pilestockage.h"
#include "fonctions.h"
#include "etat.h"

/**
 \class pileRationnels 
 \brief La classe gére des rationnels et permet de stocker les données transmises au clavier pour les exploiter
  **/
class pileRationnels : public pileStockage<Rationnel>
{
public:
	//! \brief Constructeur 
	//!
    //! On fait appelle au constructeur de la classe abstraite et on appelle la méthode iniX() afin d'initialiser la pile
    //! \param *p : Pointeur sur la pile d'affichage
	//! \param *affichagePile : Pointeur sur QTextEdit. Affichage de l'interface
    pileRationnels(PileAffichage *p,QTextEdit *affichagePile)
        :pileStockage<Rationnel>(p,affichagePile)
    {
        iniX();
    }
	
	//! \brief Ajoute au rationnel X un nouveau caractère
	//!
	//! \param c : QString contenant le caractère (chiffre à rajouter)
    void addX(const QString c);
	
	//! \brief Réninitialise les variables
	//! 
	//! Réinitialise les variables :  negatif à false, p et q à 0, sl à 0
    void iniX();
	
	//! \brief Accesseur du rationnel X
	//! \return Retourne le rationnel stocké dans l'attribut X
    Rationnel getX()const;
	
	//! \brief Retourne le rationnel X en QString
	//!
	//! \return Retourne un QString contenant le rationnel. Mis en forme pour l'affichage (avec le slash)
    QString getQStringX()const;
	
    //! \brief Met à jour l'afficheur de la pile
	//!
	//! Affiche dans l'interface le contenu de la pile
    void updateAfficheur()const;

    //! \brief Retire le dernier caractère ajouté à au dénominateur ou au numérateur suivant si on est en train de construire le numérateur ou le dénominateur
    //!
    void back();

    //! \brief Sauvegarde la pile dans le fichier mesOptions.ini
    void sauvegarder()const;
	
private:
	
	//! \brief numérateur
    int p;
	
	//! \brief dénominateur
    int q;
	
	//! \brief Position du Slash
	//! \return 0 si avant le slash
	//! \return 1 si après le slash
    bool sl; 

    //! \brief Booléen pour savoir si x est négatif
	//! \return 0 si le rationnel est positif
	//! \return 1 si le rationnel est négatif
    bool negatif;
};

#endif // PILERationnelS_H
